https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/description/
给你一个整数数组 nums 和一个整数 x 。每一次操作时，你应当移除数组 nums 最左边或最右边的元素，然后从 x 中减去该元素的值。请注意，需要 修改 数组以供接下来的操作使用。

如果可以将 x 恰好 减到 0 ，返回 最小操作数 ；否则，返回 -1 。
1658. 将 x 减到 0 的最小操作数


滑动窗口

class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int target=-x;
        for(auto e:nums)
        {
            target+=e;
        }
        if(target<0) return -1;
        int n=nums.size();
        int left=0,right=0,sum=0;
        int ret=-1;
        while(right<n)
        {
            sum+=nums[right]; //进窗口
            while(sum>target)//判断
            {
                sum-=nums[left++];  //出窗口
            }
            if(sum==target)  
            {
                ret=max(ret,right-left+1);
            }
            ++right;
        }
        if(ret==-1) return -1;
        else 
            return n-ret;
    }
};